/**
 * Clasa Minus se refera la calculul diferentei dintre 2 termeni.
 */

package q10.Operatori;

public class Minus extends Operator{
	/**Metoda calcul(double aux1,double aux2) returneaza valoarea diferentei dintre primului argument si cel de-al doilea
	 * @param aux1	aux1/aux2
	 * @param aux2 aux1/aux2
	 * @return double
	 */
	public double calcul(double aux1, double aux2) {
		return aux1 - aux2;
	}
	/**Metoda Calcul(double aux1,double aux2) returneaza valoarea diferentei dintre primului argument si cel de-al doilea
	 * Este o metoda statica
	 * @param aux1	aux1/aux2
	 * @param aux2 aux1/aux2
	 * @return double
	 */
	public static double Calcul(double aux1, double aux2)
    {
        return aux1 - aux2;
    }

	/**Metoda concatTermeni(String aux1, String aux2) concateneaza termenii operatiei de scadere.
	 * @param aux1	primul termen de concatenat
	 * @param aux2	al doilea termen de concatenat
	 * @return String
	 */
	public String concatTermeni(String aux1, String aux2) {
		String aux;
        if (aux1.compareTo("0") == 0 || aux2.compareTo("0") == 0)
        //if (!strcmp(aux1, "0") && !strcmp(aux2, "0"))
            aux = aux1;
        else if (aux1.compareTo("0") == 0) aux = aux2;
        else if (aux2.compareTo("0") == 0 ) aux = aux1;
        else
            aux = aux1 + "-" + aux2;
        return aux;
	}
	
	/**Metoda concatTermens(String aux1, String aux2) concateneaza termenii operatiei de scadere.
	 * Este o metoda statica.
	 * @param aux1	primul termen de concatenat
	 * @param aux2	al doilea termen de concatenat
	 * @return String
	 */
	public static String concatTermens(String aux1, String aux2)
    {
        String aux;
        boolean ok=false;
        if(aux2.charAt(0) == '-')        	
			{
				aux2=aux2.substring(1);
				ok=true;
			}
        if (aux1.compareTo("0") == 0 || aux2.compareTo("0") == 0)
        //if (!strcmp(aux1, "0") && !strcmp(aux2, "0"))
            aux = aux1;
        else if (aux1.compareTo("0") == 0) aux = aux2;
        else if (aux2.compareTo("0") == 0 ) aux = aux1;
        else if(ok)
        		aux =  aux1  +"+"+ aux2;
        else aux=aux1+"-"+aux2;
        	
        return aux;
    }

	/**Metoda calculDerivata returneaza valoarea derivatei diferentei.
	 * @return double
	 */
	public double calculDerivata() {
		if (fStang==null || fDrept==null)
            System.exit(1);

        return calcul(fStang.calculDerivata(), fDrept.calculDerivata());    
	}

	/**Metoda derivare() returneaza String-ul rezultat derivarii diferentei.
	 * @return String
	 */
	public String derivare() {
		if (fStang==null || fDrept==null)
            System.exit(1);

        return concatTermeni(fStang.derivare(), fDrept.derivare());  
	}

}
